Ana içeriğe geç

Akıllı Sözleşmeleri Dağıtma

Agoric komut satırı aracındaki (CLI) agoric deploy komutu onlarla konuşan sözleşmelerin ve zincir dışı web uygulamalarının dağıtılmasını desteklemektedir. Bu komutların hizmet ettiği iki temel kullanım bulunmaktadır:

  • Akıllı sözleşme kaynak kodunu blok zincirine dağlamak
  • Bir Agoric işlemi çalıştıran yerel bir sunucuya bir uygulama programı dağıtmak ve kurmak

Dapp'inizin içerisinde bulunan "contract/deploy.js" dosyasını ve "api/deploy.js" komut dosyaları çalıştırmak istiyorsanız agoric deploy komutunu kullanabilirsiniz. Bu bağlamda oluşturacağınız dApp kodlarını mevcut bir sistemden kopyalayabilirsiniz yada sizlere bu başlıkta öğreteceğimiz gibi kendiniz modifiye edebilirsiniz.

Dapp'inizin üç ana alt dizini olduğunu unutmayın:

  • sözleşme/: zincir üstü akıllı sözleşmenizi tanımlayan dosyaları içerir.
  • api/, UI ön ucunun HTTP/WebSocket aracılığıyla zincir üstü bir arka uç sözleşme örneğine iletişim kurmasını ve Dapp sözleşme örneğinizi ve arka ucunuzu başlatmasını sağlayan dosyaları içerir.
  • ui/, sözleşmenizin tarayıcı kullanıcı arabirimiyle ilgili dosyaları içerir.

Peki Nasıl çalışır ?

Tüm dağıtım, çalışan yerel Agoric işlemi aracılığıyla gerçekleşir. Bu genellikle ag-solo işlemidir, bazen bu sistem bir Agoric VM veya yerel bir sunucu olarak tanımlanır.

ag-solo, yerel olarak çalışan veya uzak bir zincirle iletişim kurar. Yerel işlem, zincirdeki hizmetlere referanslar içeren bir home nesnesine sahiptir bu nesne ilişkili API komutlarını çağırmak için kullanılabilir. Bu tür referanslar, nesneleri paylaşmak için board olan zoe ve uygulama kullanıcısının cüzdanını içerir.

Her "deploy.js", zincire ulaşabileceği "ag-solo"ya bağlı kendi geçici sürecinde çalışır. Önce paket halindeki sözleşme kaynak kodunu "ag-solo"ya yükler, daha sonra "zoe"ye erişmek için "ev" nesnesinden geçer ve bunu, kodu zincire yüklemek için kullanır.

Dağıtım script'lerinin sözleşmeleri ve Dapp'leri dağıtmak için kullandığı tüm zincir üstü komutlar cüzdanlarıyla ilişkili REPL aracılığıyla geliştiriciler tarafından da kullanılabilir.

Sözleşme dağıtımı

İlk önce sözleşme dağıtımına bakalım. "contract/deploy.js", bir sözleşmenin kaynak kodunu bir araya toplar (birden fazla dosya ve modülden oluşabilir) ve "installs" Zoe kullanılarak blok zincirinde kaynak kodu olarak. Bu, sözleşme kodunu yürütmez; sadece kodun zincir üzerinde kullanılabilir olmasını sağlar.

Sözleşme deployment işleminde sözleşme kaynak kodunu zincire yüklemek için zoe.install() kullanılır. Tipik bir sözleşme dağıtımında, deploy script'i yüklemeyi zincirde geniş çapta erişilebilir olması için varsayılan paylaşılan panoya ekler. Script daha sonra pano kimliğini aşağıda gösterildiği gibi Dapp'ın ui dizinindeki bir yapılandırma dosyasına yazar.

Varsayılan olarak, "agoric init" komutunu çalıştırdığınızda, Dapp'ınız 'dapp-fungible-faucet' contract/deploy.js dosyalarını, elde eder. Bu dosyalar tipik bir sözleşme konuşlandırma komut dosyası örneğimizdir.

https://github.com/Agoric/dapp-fungible-faucet/blob/HEAD/contract/deploy.js "dapp-fungible-faucet" sözleşmesini dağıtma (örneğin "agoric init"ten sonra "agoric agoric deploy contract/deploy.js" ile yerel bir dizine kopyaladık) zincire yükler ve "ui/public/conf/installationConstants.js" dosyasını alt kısımda ifade edildiği gibi oluşturur.

// dapp-fungible-faucet/contract/deploy.js'DEN OLUŞTURULDU
export default {
"CONTRACT_NAME": "fungibleFaucet",
"INSTALLATION_BOARD_ID": "1456154132"
};

Pano, bu durumda nesne başına benzersiz bir kimlik sağlar. Bizim durumumuz için bu değer "1456154132" olmaktadır dolayısıyla her sözleşme dağıtımı için farklıdır.

Uygulama hizmeti dağıtımı ve kurulumu

Şimdi uygulama dağıtımına ve kurulumuna bakalım. Sözleşme dağıtımıyla karşılaştırıldığında özel uygulamanız ve sözleşmeniz için Agoric API sunucusu dağıtımını özelleştirmeniz ve çok daha fazla hizmet kurmanız gerekir. Bazı Dapp'ler bir kez kurulacağını ve tüm müşterilere hizmet vereceğini varsayarlarsa tek sözleşme örneği (singleton: bir açık artırmanın aksine veya bir kez kurulan ancak yönettiği her satış için ayrı ayrı somutlaştırılan takas sözleşmesi) kullanır.

Bir singleton'ın şunları yapması gerekebilir:

  • Somutlaştırıcı olun.
  • Belirli para birimleri için ihraççılar gibi zincir üzerindeki kaynakları bulun ve bunlara bağlanın.
  • Yeni para birimleri veya NFT'ler gibi yeni zincir üstü kaynaklar oluşturun.
  • Uygulamanın kullanması için yeni Purses oluşturun
  • Zincir üstü sözleşme örneğini ilk siparişler veya yapılandırma ile tohumlayın.

Bu örnek sözleşme "api/deploy.js" betikleri, yukarıdaki özel kurulum eylemlerinin aralığı:

Uygulama dağıtım adımları şunları içerebilir:

  • "api/" kodunu paketleyin ve çalışan yerel "ag-solo"ya paketleyin
  • Sözleşme kurulum yapılandırma bilgilerini pakete dahil edin
  • Yeni para birimleri oluşturun ve bunları uygulamanın cüzdanına ekleyin

Tüm müşteriler için tek bir bulut sunucusu kullanan sözleşmelere yönelik adımlar ayrıca şunları içerebilir:

  • Sözleşme konuşlandırması tarafından oluşturulan yüklemeyi kullanarak bir sözleşme örneği oluşturun
  • Yeni örneği yapılandırmak için o örnek oluşturmadaki daveti kullanın
  • Sözleşme örneğinin instance'ini Kurul'a kaydedin
  • Sözleşme örneğinin Pano Kimliğini bir yapılandırma dosyasına kaydedin